# 1、写函数,将传入的列表或元祖对象的奇数位索引对应的元素
'''
def odd_number(input_list):
    elements = input_list[1::2]
    return elements

list1 = [1,5,4,4,2,3,6]
result = odd_number(list1)
print(result)
'''

# 2、写函数,判断用户传入的对象(string,list,tuple)长度是否大于5
'''
def length_five(con):
    if type(con) == str and len(con) > 5
'''

# 3、写函数,计算传入的string中,数字,字母,空格以及其它内容的个数,并返回结果
'''
def count(result):
    int_num = 0
    str_num = 0
    other_num = 0
    space = 0
    for i in result:
        if i in "0123456789":
            int_num += 1
        elif i in "":
            space += 1
        elif ("a" <= i <= "z") or ("A" <= i <= "Z"):
            str_num += 1
        else:
            other_num += 1
    print(f"整数{int_num}，字母有{str_num}，空格及其他内容有{other_num}")


count("asd 7832 6478 ^*^^&#$ ")  # 函数里有return，外面直接执行就输出
'''
# 4、写函数,接收两个数字参数,返回较大的那个数字
# def amx_num(a,b):
#     if a > b:
#         return a
#     else:
#         return b

# 5、编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
# def cacluate(*a):
#     return a

# 6、编写一个函数, 接收字符串参数, 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
'''
def str_count(result):
    big_letter_count = 0
    small_letter_count = 0
    for i in result:
        if i >="a" and i <="z":
            small_letter_count += 1
        elif i >="A" and i <= "Z":
            big_letter_count += 1
    return big_letter_count,small_letter_count
print(str_count("YhUHUHUb"))
'''
# 7、编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和一个整形数k, 返回一个新列表.
# 函数需求:
# 将列表下标k之前对应(不包含k)的元素逆序;
# 将下标k及之后的元素逆序;
'''
def list_reverse(list1,k):
    list2 = list1[:k].reverse()
    list3 = list1[k + 1:].reverse()
    list3.insert(0, list1[k])
    list2.extend(list3)
    print(list2)
list_reverse([1, 2, 3, 4, 15, 61, 72, 88, 26],5)
'''
# 8、编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值

# 9、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
'''
def Human_information(name,sex,age,address):
    # name = input("请输入姓名：")
    # sex = input("请输入性别：")
    # age = input("请输入年龄：")
    # address = input("请输入姓名地址")
    if sex == "":
        sex = "男"
    print(f"姓名为{name}，性别为{sex}，年龄为{age}，家庭住址为{address}。")

Human_information("王长帅","","18","辽宁省")
'''


# 10、写函数,接收n个数字,返回这些数字的和(动态传参)
'''
def sum_number(*int_number):
    sum = 0
    for i in int_number:
        sum+=i
    return sum
print(sum_number(1,2,4,65,4,65,5))
'''
# 11、在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs里
def container(*args,**kwargs):
    print(f"不定长参数{args}")
    print(f"关键字不定长参数{kwargs}")
# 12、写函数,把传过来的列表中的每一个元素都用"_"拼接,并返回

# 13、写函数,传入一个数字,返回这个数的阶乘。示例：1x2x3....

# 14、写函数,返回一个扑克牌列表,里面有52项,每一项都是一个tuple
# 15、编写函数，求1+2+3+…N的和

# 16、编写一个函数，求多个数中的最大值
'''
def max_number(*number):
    a = list(num)
    a.sort(reverse=True)
    return a[0]
'''
# 17、编写一个函数，提取指定字符串中所有的字母，然后拼接在一起产生一个新的字符串
# 18、写一个函数，求多个数的平均值
'''
def avg_number(*number):
    avg = sum(number) / len(number)
    return avg
print(avg_number(1,2,3,4,5,6,7,8))
'''
# 19、写一个自己的len函数，统计指定序列中元素的个数
# 20、找出传入的列表或元组的奇数位对应的元素，并返回一个新的列表
# 21、水仙花数：个位、十位、百位的立方加在一起等于数的本身
# 22、 定义函数，有一个形参，传入的是列表，数组大小不超过 100个，
# 数组中的每个元素值不允许超过 100，但是可以等于100，
# 如果列表大小超过了100个截取到第100个为止，要求返回的列表格式：
# 删除所有重复元素，使得每个元素只出现一次
# 按照数字的大小，由高到低排序返回
# 23、定义函数 getLength，打印用户传入的容器类型和数据长度
# 24、定义函数 generateNum( )
# 25、定义函数 moreThan(num)，判断输入的数字是否大于1500


# 26、定义函数，有两个形参，第一个形参到第二个形参的范围，所有平方数之和

# 27、写函数，检查传入字典的每一个value长度，如果大于2， 那么仅保留前两个长度的内容， 并将新内容返回给调用者

# 28、写函数，判断用户传入的对象（字符串、列表、元组）的元素是否为空
'''
def element_is_null():
    text1 = input("请输入内容")
    if text1 == "":
        print("输入的内容为空")
    else:
        print("输入的内容不为空")
element_is_null()
'''
# 29、编写自定义函数，完成一个简单的减法运算函数
'''
def subtraction():
    a = int(input("请输入减数"))
    b = int(input("请输入被减数"))
    c = a-b
    return c
'''
# 30、编写自定义函数，可以输出自己的名字即可。
'''
def say_name():
    print("lhb")
say_name()
'''
# 31、编写自定义函数：剪刀石头布
# 游戏开始，初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分。
#  当用户为 0 分时，游戏结束，提示游戏结束，比赛输了
# 当用户为 200 分时，游戏结束，提示游戏结束，赢得比赛、每轮比赛都输出当前的分数
# 1 代表剪刀 2 代表石头 3 代表布


# 32、编写一个函数，接受一个字符串作为参数，并返回该字符串的逆序字符串
'''
def str1(result):
    return result[::-1]

print(str1("auodhbnuoasibndas"))

'''
# 33、编写一个函数，接受一个数字列表作为参数，并返回其中所有偶数的列表
# def int_list1(*result):
'''
def int_list1(*result):
    oushu_list = []
    for i in result:
        if i % 2 == 0:
            oushu_list.append(i)
    print(oushu_list)
a = [1,2,3,4,5]
result = int_list1(a)
print(result)
'''
# 34、编写一个函数，接受一个字符串列表作为参数，并返回其中最长的字符串。
'''
def string_list1(*result:list):
    max_list = result[0]
    for i in result:
        if len(i) > len(max_list):
            max_list = i  #max_list=" asfsaf"
    print(max_list)
string_list1(" asfsaf","safasfgsag","2379847239875","i")
'''
# 35、编写一个函数，接受一个数字列表作为参数，并返回其中所有数字的平方的总和
'''
def square_sum(sum_list):
    m = 0
    for i in sum_list:
        i=i**2  # i=1
        m=m+i  # m=1
    return m
list1=[1,2,3]
result = square_sum(list1)
print(result)
'''
# 36、编写一个函数，接受一个字符串作为参数，并返回其中所有单词的首字母的大写形式
'''
def cap_first(string):
    # 使用 split() 方法将字符串分割成单词
    words = string.split()

    # 使用列表推导式将每个单词的首字母大写
    A_words = [i.capitalize() for i in words]

    # 使用 join() 方法将单词重新组合成字符串
    result_string = ' '.join(A_words)

    return result_string

# 测试
input_str = "hello world example one TWO"
result = cap_first(input_str)
print(result)
'''
# 37、编写一个函数，接受两个列表作为参数，并返回两个列表的交集
# 举例：

def same_list(list1, list2):
    set1 = set(list1)
    set2 = set(list2)
    print(list(set1&set2))
list11 = [100, 200, 300, 500,454]
list22 = [454, 789, 125, 500,46]

same_list(list11,list22)

# 38、定义一个学生注册函数enroll()，打印学生姓名，性别，年龄，城市， 使用默认参数降低调用函数的复杂度

def enroll(name, gender='未知', age=0, city='未知'):
    print(f"学生姓名:{name},")
enroll("张三","男",18,"大连")
